home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Languguage OS 2
/
Languguage OS II Version 10-94 (Knowledge Media)(1994).ISO
/
language
/
embedded
/
m68k
/
tutor.arc
/
TRAP14.SA
< prev
next >
Wrap
Text File
|
1990-01-05
|
7KB
|
204 lines
TRAP14 IDNT 0,2 Trap 14 handler of "TUTOR" 06/25/82
XREF.S AV46
XREF CHRPRINT
XREF FIXBUF
XREF FIXDADD
XREF FIXDATA
XREF FIXDCRLF
XREF GETHEX
XREF GETNUMA
XREF GETNUMD
XREF GETSER1
XREF HEX2DEC
XREF INCHNE
XREF MACSBUG
XREF OUT1CR
XREF OUTCH
XREF OUTPUT
XREF OUTPUT21
XREF PNT2HX
XREF PNT4HX
XREF PNT6HX
XREF PNT8HX
XREF PORTIN1
XREF PORTIN1N
XREF PORTIN20
XREF PRCRLF
XREF PUTHEX
XREF.S REGA7
XREF SAVE
XREF START
XREF TAPEIN
XREF TAPEOUT
XREF TDISPLY
XREF.S TEMP
EOT EQU 4
LF EQU $A
CR EQU $D
SPC 1
* CALLING SEQUENCE
* D7 = XXXXXXFF WHERE "FF" IF FUNCTION NUMBER
* TRAP #14
SAVEREGS MACRO
MOVE.L A7,REGA7 SAVE STACK POINTER
LEA SV\@(PC),A7 A7 = RETURN ADDRESS (FOR CALL TO SAVE)
MOVE.L A7,TEMP TEMP = RETURN ADDRESS
BRA SAVE BSR WITHOUT USING STACK
SV\@ DS 0
SPC 1
ENDM
ADDR2MEM MACRO
PEA.L \1(PC) MOVE ADDRESS TO MEMORY
MOVE.L (A7)+,\2
ENDM
SECTION.S 1
CTLINK DS.L 1 POINTER TO FIRST TABLE
SECTION 10
ADDR2MEM TRAP14,AV46
MOVE.L #(254<<24)+CT,CTLINK
SECTION 11
TRAP14
MOVEM.L D1/D7/A1-A2,-(A7)
MOVE.L CTLINK,A1
T100 MOVE.B (A1),D1 D1 = FUNCTION FROM TABLE
CMP.B #255,D1
BEQ.S T500 END OF TABLE
CMP.B #254,D1
BEQ.S T600 LINK IN LIST
CMP.B D7,D1
BEQ.S T400 FOUND MATCH
ADD.L #4,A1
BRA T100
T400 MOVE.L (A1),D1 FFAAAAAA
ASL.L #8,D1 AAAAAA..
LSR.L #8,D1 00AAAAAA GO TO ADDRESS
BTST.B #5,16(A7)
BEQ.S T450 CALL FROM USER MODE
* CALL FROM SUPERVISOR MODE
* STACK (WORDS)
* +0 D1 HIGH
* +2 D1 LOW
* +4 D7 HIGH
* +6 D7 LOW
* +8 A1 HIGH
* +10 A1 LOW
* +12 A2 HIGH STATUS REG
* +14 A2 LOW GOTO HIGH
* +16 STATUS REG GOTO LOW
* +18 RETURN HIGH RETURN HIGH
* +20 RETURN LOW RETURN LOW
*
MOVE.L 16(A7),12(A7) SR
MOVE.L D1,14(A7) GOTO ADDRESS
MOVEM.L (A7)+,D1/D7/A1 RESTORE REGISTERS
RTE GOTO (AND TRIM STACK)
PAGE
* STACK (WORDS)
* +0 D1 HIGH
* +2 D1 LOW
* +4 D7 HIGH
* +6 D7 LOW
* +8 A1 HIGH
* +10 A1 LOW
* +12 A2 HIGH (USER STACK)
* +14 A2 LOW
* +16 STATUS REG STATUS REG
* +18 RETURN HIGH GOTO HIGH RETURN HIGH
* +20 RETURN LOW GOTO LOW RETURN LOW
*
* CALL FROM USER MODE
T450 MOVE.L 18(A7),D7 RETURN PC
MOVE.L D1,18(A7) GOTO ADDRESS
MOVE.L USP,A1 POINTER TO USER STACK
MOVE.L D7,-(A1) RETURN PC TO USER STACK
MOVE.L A1,USP UPDATED USER STACK POINTER
MOVEM.L (A7)+,D1/D7/A1/A2
RTE
T500 MOVEM.L (A7)+,D1/D7/A1/A2
SAVEREGS
LEA MSGT14(PC),A5
BSR FIXDATA
BSR OUT1CR
BSR TDISPLY
BRA MACSBUG
MSGT14 DC.B 'UNDEFINED TRAP 14',EOT
T600 MOVE.L (A1),A1
BRA T100
T700 DS 0 253 APPEND NEW TABLE
MOVE.L A0,D1 ..AAAAAA
MOVE.L CTLINK,A0 A0 = LINK TO BE RETURNED
ROL.L #8,D1 AAAAAA..
MOVE.B #254,D1 AAAAAAFE
ROR.L #8,D1 FEAAAAAA
MOVE.L D1,CTLINK
RTS
PAGE
* CREATE ENTRY TO FUNCFIION/ADDRESS TABLE
* FFAAAAAA
* FF...... FUNCTION NUMBER
* ..AAAAAA ADDRESS OF FUNCTION
FADDR MACRO \1,\2
DC.L (\1<<24)+\2
ENDM
CT FADDR 253,T700 APPEND NEW TABLE
FADDR 252,FIXDADD APPEND DATA (A5) TO BUFFER (A6)+
FADDR 251,FIXBUF SET A5 & A6 AS POINTERS TO BUFFER
FADDR 250,FIXDATA MOVE DATA (A5) TO BUFFER; A5=BUFFER A6
FADDR 249,FIXDCRLF
FADDR 248,F100 OUTPUT CHAR PORT1 D0=CHAR
FADDR 247,F110 INPUT CHAR PORT1 D0=CHAR
FADDR 244,CHRPRINT OUTPUT CHAR PORT3 D0=CHAR
FADDR 243,OUTPUT OUTPUT STRING PORT1 (A5) (A6)
FADDR 242,OUTPUT21 OUTPUT STRING PORT2 (A5) (A6)
FADDR 241,PORTIN1 INPUT STRING PORT1 (A5) (A6)
FADDR 240,PORTIN20 INPUT STRING PORT2 (A5) (A6)
FADDR 239,TAPEOUT OUTPUT STRING TO PORT4 (A5) (A6)
FADDR 238,TAPEIN INPUT STRING FROM PORT4 (A5) (A6)
FADDR 237,PRCRLF OUTPUT STRING TO PORT3 (A5) (A6)
FADDR 236,HEX2DEC CONVERT HEX D0 TO DECIMAL (A6)+
FADDR 235,GETHEX GET HEX CHAR INTO D0 FROM (A5)+
FADDR 234,PUTHEX FORMAT HEX CHAR FROM D0 TO (A6)+
FADDR 233,PNT2HX FORMAT 2 HEX CHAR FROM D0 TO (A6)+
FADDR 232,PNT4HX FORMAT 4 HEX CHAR FROM D0 TO (A6)+
FADDR 231,PNT6HX FORMAT 6 HEX CHAR FROM D0 TO (A6)+
FADDR 230,PNT8HX FORMAT 8 HEX CHAR FROM D0 TO (A6)+
FADDR 229,START RESTART TUTOR INITIALIZE EVERYTHING
FADDR 228,MACSBUG GOTO TUTOR; PRINT PROMPT
FADDR 227,F120 OUTPUT STRING,CR,LF PORT1 (A5) (A6)
FADDR 226,GETNUMA GET HEX NUMBER (A5)+ INTO D0
FADDR 225,GETNUMD GET DECIMAL NUMBER (A5)+ INTO D0
FADDR 224,PORTIN1N INPUT STRING PORT1 (NO AUTO LF)
FADDR 255,$FFFFFF END KEY
F100 BSR GETSER1 A0 = PORT1 ADDRESS
BRA OUTCH
F110 BSR GETSER1 A0 = PORT1 ADDRESS
BRA INCHNE
F120 BSR OUTPUT OUTPUT STRING,CR,LF PORT1 (A5) (A6)
MOVE.L #CR,D0
BSR F100 OUTPUT CHAR
MOVE.L #LF,D0
BSR F100 OUTPUT CHAR
RTS
END